# -*- coding: UTF-8 -*-
# cython: language_level=3
import pymongo
from pymongo.errors import DuplicateKeyError

from config import MONGO_DB, MONGO_URI
from utils.log import log


class Singleton(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_inst'):
            cls._inst = super(Singleton, cls).__new__(cls, *args, **kwargs)

        return cls._inst


class MongoDB(Singleton):
    def __init__(self):
        super(MongoDB, self).__init__()

        if not hasattr(self, '_db'):
            try:
                self.client = pymongo.MongoClient(MONGO_URI)
                self._db = self.client[MONGO_DB]
            except Exception as e:
                raise
            else:
                log.debug('连接到数据库 %s' % MONGO_DB)

    def get_db(self):
        return self._db

    def find(self, table, condition={}, limit=0, sort=[]):
        '''
        @summary: 查询
        ---------
        @param table: 表名
        @param condition: 条件 默认查询全部
        @param limit: 个数限制 默认查询全部
        @param sort: 排序 默认不排序
        ---------
        @result:
        '''
        if sort:
            result = self._db[table].find(condition).limit(limit).sort(sort)
        else:
            result = self._db[table].find(condition).limit(limit)

        return list(result)

    def add(self, table, key_value):
        '''
        @summary: 添加 表不存在自动创建表
        ---------
        @param table: 表名
        @param key_value: 要添加的值 字典格式
        ---------
        @result: True / False
        '''

        try:
            self._db[table].insert_one(key_value)
        except DuplicateKeyError:
            return False
        except Exception as e:
            log.error(e)
            return False
        else:
            return True

    def update(self, table, old_value, new_value, multi=True):
        '''
        @summary: 更新
        ---------
        @param table: 表名
        @param old_value: 旧值
        @param new_value: 新值
        @param multi: 是否删除多个 默认是
        ---------
        @result:
        '''
        try:
            if multi:
                self._db[table].update_many(old_value, {'$set': new_value})
            else:
                self._db[table].update_one(old_value, {'$set': new_value})

        except Exception as e:
            # log.error(e)
            # print(table, old_value, new_value, )
            raise e
            # return False
        else:
            return True

    def delete(self, table, condition={}):
        '''
        @summary: 删除数据
        ---------
        @param table: 表名
        @param condition: 删除条件 {}删除所有
        ---------
        @result:
        '''
        try:
            self._db[table].delete_many(condition)
        except Exception as e:
            log.error(e)
            return False
        else:
            return True

    def set_unique_key(self, table, key):
        try:
            self._db[table].create_index(key, unique=True)
        except:
            log.error("%s表中%s有重复的数据, 请先去重" % (table, key))

    def set_ensure_index(self, table, key):
        try:
            self._db[table].create_index(key, unique=False)
        except Exception as e:
            log.error(e)


if __name__ == '__main__':
    db = MongoDB()

    r = db.find('WEB_search_info', {}, limit=1)
    print(r)
    # for i in r:
    #     if not i['url'].startswith('https://www.qqlinxiang.cn/index.php/vod/play/id'):
    #         print(i['url'])

    # db.update('WEB_search_info', {"home_page": "http://www.haobaba88.com", "Confidence": 0,
    #                               "url": {
    #                                   '$regex': '^https:\/\/www\.qqlinxiang\.cn\/index\.php\/vod\/play\/id.*/'}},
    #           {"Confidence": 200})

    # a =     {"$and": [{"es_read": {"$exists": False}}, {"Confidence": {"$gt": 100}}]}
    # # a =     {"es_read": {"$exists": False}, "Confidence": {"$gt": 100}}
    #
    #
    # main_url = db.find('WEB_search_info', a)
    # print(len(main_url))
    # for i in main_url:
    #     print(i)
    # db._db['WEB_urls'].update_many({'status': 66}, {'$set': {'status': 2019}})
    # # print(list(db._db['WEB_urls'].find({"status": 2019, "title":{'$regex':'有限公司'}})))
    #
    # dubo = {'葡京', '澳门', '金沙', '九龙', '威尼斯人', '银河', '英皇', '吉祥坊', '德州', '百家乐',
    #         '娱乐网', '皇冠', '万豪', '万博', '凯旋门', '百利', '尼斯', '亚搏', '黄金城', 'PK10', 'bet', 'Bet', 'w88', '88330', 'ag88',
    #         '9778',
    #         'hg0088', 'JDB', 'jdb', 'pk10',
    #         '赌博', '博彩', '搏彩', '足彩', '竞彩', '体彩', '福彩', '竞猜', '赌钱', '赌场', '投注站', '娱乐城', '娱乐场', '赛车计划'
    #                                                                                          '财神', '飞艇', '打鱼', '捕鱼',
    #         '快三', '斗牛', '一分彩', '六合', '牌九', '麻将', '扑克', '金花', '斗地主', '庄闲', '押庄', '棋牌',
    #         '真人', '开户', '投注', '下注', '老虎机', '赚钱', '彩票', '开奖', '稳赚', '正规', '大奖', '现金', '真钱', '真金'}  # '牛牛',
    # av_0 = ['15', '17', '18', '28', '97', '主播', '五月', '伸进', '做人', '初中生', '初级中学', '制服', '午夜', '口腔', '另类', '嗷嗷', '大胆',
    #         '夫妻', '女', '姐姐', '完整版', '射', '小视频', '年轻', '快播', '情人', '情侣', '懂得', '成人', '成年', '找个', '抱住', '换脸', '搞', '撸',
    #         '操',
    #         '无限', '日', '柠檬', '欲望', '激情', '琪琪', '用力', '男', '神马', '禁止', '窝窝', '粉嫩', '色', '草莓', '野狼', '阿拉善', '青春', '青草',
    #         '青青', '黄']  # '猫咪','茄子','豆奶','番茄','向日葵', '香蕉',
    #
    # av = ['1024', '4480yy', '6080', '91', '99', 'AV', 'Av', 'HEZYO', 'aV', 'ag777', 'av', 'bbin', 'porm', 'pron', '一本道',
    #       '一道', '丁香', '下马', '不卡', '不要', '东京', '丝瓜', '丝袜', '久久', '久草', '乱伦', '五月天', '人人爱', '人妇', '人妻', '人成', '伊人', '作爱',
    #       '做受', '做爱', '偷偷', '偷拍', '偷窥', '兽兽', '凌辱', '加勒比', '口交', '口工', '同居', '啪啪', '喷水', '四虎', '夜夜', '女厕', '奶子',
    #       '奶罩', '好色', '婷婷', '射死', '小姐', '尹人', '巨乳', '强奷', '很鲁视', '快猫', '性交', '性爱', '性生活', '情色', '成人版', '成版人', '我爱大',
    #       '操逼', '无码', '日日夜夜', '最污', '杳蕉', '毛片', '波多野', '熟妇', '爱色', '特黄', '狠狠', '男朋友', '私处', '级片', '结衣', '缴情',
    #       '自偷', '自慰', '自拍', '自那慰', '色区', '色原', '色噜噜', '色情', '色网', '色色', '草网', '菠萝', '萝莉', '衬衫', '要色', '超碰', '轮奸',
    #       '青娱乐', '青青草', '韩私', '高潮', '鲁一鲁', '鲁啪', '黄片', '黄瓜', '黄短', '黄色录像', '黄色片', '黄色电影', '黄频']
    # # for i in av_0:
    # #     db._db['WEB_urls'].update_many({"status": 2019, "title": {'$regex': i}}, {'$set': {'status': 66}})
